#ifndef _XX_YY_BMOCK_IGNORE_ARG_VAL
#define _XX_YY_BMOCK_IGNORE_ARG_VAL

#include <boost/utility/enable_if.hpp>
#include "detail/bmock_arg_val.hpp"
#include "detail/bmock_raw_mem.hpp"
#include <boost/lexical_cast.hpp>
#include <string>

namespace bmock {
	struct ignore_arg_val : public arg_val
	{
		ignore_arg_val(const char *n) : arg_val(n) {} 

	protected:
		bool              null_supplied() const{return true;}
		void              print(std::ostream &) const {};
		~ignore_arg_val() {};
	};

	inline arg_val *make_ignore_arg_val(const char *const = "") { 
		//prevent two unused having the same name (to prevent warning)
		static unsigned int unusedCounter = 0;
		return new ignore_arg_val(boost::lexical_cast<std::string>(unusedCounter++).c_str()); 
	}
}

#include <boost/preprocessor/stringize.hpp>


#define __BMOCK_USE_IGN(ARG)\
	bmock::make_ignore_arg_val(BOOST_PP_STRINGIZE(ARG)) 

#define __BMOCK_USE_UNUSED(TYPE)\
	bmock::make_ignore_arg_val()

#endif